package com.yswy.backstage.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yswy.backstage.dto.req.*;
import com.yswy.backstage.dto.res.MenuTreeResVO;
import com.yswy.backstage.dto.res.PermissionConfigTreeResVO;
import com.yswy.backstage.dto.res.PermissionPageResVO;
import com.yswy.backstage.dto.res.RuleTreeResVO;
import com.yswy.domain.entity.user.Role;
import com.yswy.domain.vo.gld.filter.RolePageFilter;
import com.yswy.domain.vo.gld.filter.UserPageFilter;
import com.yswy.domain.vo.gld.filter.RolePageResVO;
import com.yswy.domain.vo.gld.filter.UserPageResVO;

import java.util.List;

public interface IAdminService {
    /**
     * 菜单权限树
     * @param idType 1:用户Id 2:角色Id
     */
    List<MenuTreeResVO> menuTree(Long id, Integer idType);
    /** 权限|按钮 规则树 */
    List<RuleTreeResVO> ruleTree(Long menuId, Long optionId);
    /** 权限 配置专用权限树 */
    List<PermissionConfigTreeResVO> permissionConfigTree(PermissionConfigTreeReqVO req, Long optionId);

    /** 权限 解冻|冻结 */
    void permissionFreezing(Long id, boolean freezingSatus, Long optionId);
    /** 权限 分页 */
    Page<PermissionPageResVO> permissionPage(PermissionPageFilter filter, Long optionId);
    /** 权限 添加 */
    void permissionCreate(PermissionOptionReqVO req, Long optionId);
    /** 权限 更新 */
    void permissionUpdate(PermissionOptionReqVO req, Long optionId);
    /** 权限 删除 */
    void permissionDelete(Long id, Long optionId);

    /** 角色 分页 */
    Page<RolePageResVO> rolePage(RolePageFilter filter, Long optionId);
    /** 角色 解冻|冻结 */
    void roleFreezing(Long id, boolean freezingSatus, Long optionId);
    /** 角色 列表 */
    List<Role> roleList(String roleName, Long optionId);
    /** 角色 添加 */
    void roleCreate(RoleOptionReqVO role, Long optionId);
    /** 角色 更新 */
    void roleUpdate(RoleOptionReqVO role, Long optionId);
    /** 角色 删除 */
    void roleDelete(Long id, Long optionId);

    /** 用户 分页 */
    Page<UserPageResVO> userPage(UserPageFilter filter, Long optionId);
    /** 用户 解冻|冻结 */
    void userFreezing(Long id, boolean freezingSatus, Long optionId);
    /** 用户 添加 */
    void userCreate(UserOptionReqVO req, Long optionId);
    /** 用户 更新 */
    void userUpdate(UserOptionReqVO req, Long optionId);
    /** 用户 删除 */
    void userDelete(Long id, Long optionId);
}
